#ifndef MYTOOLS_H
#define MYTOOLS_H
#include <QWidget>
#include <QMutex>
class QString;
class QByteArray;
/**
 * @brief MyTools::MyTools
 * @abstract 将各种类似于读文件这样的常用功能，集中在这一个地方，这样所有的类都可以使用
 */\
class Util : public QWidget
{
    Q_OBJECT
public:

    //Json文件
    //读各种通讯协议用
    QByteArray read_json(QString path, QString key, int speed=0, bool is_setValue=false);
    //判断是否有JsonObject对象，如果有，就传给调用者
    bool hasJsonObject(QString path, QJsonObject& jsonObject);
    bool readString(QString path, QString key, QString& data);
    bool readDouble(QString path, QString key, double& data);
    bool readArray(QString path, QString key, QJsonArray& dataset);
    //doWrite是实际写操作的函数
    bool doWrite(QString path, QJsonObject jsonObject);
    bool writeString(QString path, QString key, QString data);
    bool writeDouble(QString path, QString key, double data);
    bool writeArray(QString path, QString key, QJsonArray dataset);
    unsigned int crc_cjl_value(unsigned char *data, unsigned char length);

    bool vector2QjsonArray(std::vector<double> v_date, QJsonArray& target_arry);
    //Qss文件
    void qss_style(QWidget &w, QString path);
    //单例模式-返回唯一的构造实例供外界使用
    static Util& get()
    {
        if(_u == nullptr)
        {
            _u = new Util();
        }
        return *_u;
    }
private:
    //单例模式
    Util();                             //防止外部调用构造函数创建对象
    Util(Util const& u);                //防止拷贝创建
    Util& operator=(Util const& u);     //防止赋值对象
    const Util& operator=(Util const& u) const;
    static Util* _u;

    QMutex _lock;
public:
    enum JsonType{
        Type_Int,
        Type_String,
        Type_Array
    };
};

#endif // MYTOOLS_H
